package com.chen;

import java.util.concurrent.locks.ReentrantLock;

/**
 * 可重入锁
 * 同一个线程在外层方法获得锁之后，
 * 能在内层方法再次获取该锁而不会被阻塞。
 */
public class DemoReentrantLock {
    //用synchronized 演示可重入锁
//    public static void main(String[] args)  throws Exception{
//           synchronized (DemoReentrantLock.class){
//               System.out.println("外层");
//
//               synchronized (DemoReentrantLock.class){
//                   System.out.println("内层");
//                   Thread.sleep(5000);
//               }
//           }
//
//    }


    //使用Lock
    public static void main(String[] args) {
        ReentrantLock lock = new ReentrantLock();
        new Thread(()->{
            //直接写run方法的方法体
            lock.lock();
            System.out.println("11");
            lock.unlock();  // lock和unlock要成对出现
        }).start();
        new Thread(()->{
            //直接写run方法的方法体
            lock.lock();
            System.out.println("22");
        }).start();

    }


}
